package client;

import java.awt.event.*;

import javax.swing.*;
import java.awt.*;

/**
 * Formulaire pour le login
 * @author CONSTANTIN Laurent
 * @version 1.0
 */
public class JPanelLogin extends JPanel {
	static final long serialVersionUID = -2704015582544368311L;

	private final ClientApplication clientApp;
	// Saisies
	private JTextField inputUser = new JTextField("");
	private JTextField inputPassword = new JTextField("");
	// Boutons
	private JButton btnOK = new JButton("Se Connecter");
	private JButton btnCompte = new JButton("Creer un compte");

	/**
	 * Verifie que le formulaire est rempli et envoie la demande de login
	 */
	public void login() {

		if (inputUser.getText().trim().isEmpty() || inputPassword.getText().trim().isEmpty()){
			JOptionPane.showMessageDialog(this,
					"Vous devez remplir le formulaire", "Erreur de saisie",
					JOptionPane.ERROR_MESSAGE);
		}else{
			clientApp.connectionUserPassword(inputUser.getText(),
					inputPassword.getText());
		}

	}
	/**
	 * Constructeur
	 * @param clientApp L'application client
	 */
	public JPanelLogin(ClientApplication clientApp) {
		this.clientApp = clientApp;
		// Conteneurs pour la mise en forme
		JPanel haut = new JPanel();
		haut.setLayout(new GridLayout(1, 2));
		JPanel bas = new JPanel();
		bas.setLayout(new GridLayout(1, 2));

		// Tailles
		setLayout(new BoxLayout(this, 2));
		setPreferredSize(new Dimension(250, 160));
		inputUser.setPreferredSize(new Dimension(100, 20));
		inputPassword.setPreferredSize(new Dimension(100, 20));

		// Pression de la touche enter sur une zone texte envoie le formulaire
		KeyAdapter pressEnter = new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == 10) {
					JPanelLogin.this.login();
				}
			}
		};
		inputUser.addKeyListener(pressEnter);
		inputPassword.addKeyListener(pressEnter);
		
		// Clique dans une zone texte selectionne tout le texte pour une
		// nouvelle saisie
		FocusListener focusSelectAll = new FocusAdapter() {
			public void focusGained(FocusEvent e) {
				if (e.getSource() instanceof JTextField) {
					((JTextField) e.getSource()).selectAll();

				}
			}
		};
		inputUser.addFocusListener(focusSelectAll);
		inputPassword.addFocusListener(focusSelectAll);
		
		// Action sur les boutons
		btnOK.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				JPanelLogin.this.login();
			}
		});
		btnCompte.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				JPanelLogin.this.clientApp.getClientView()
						.showNewAccountDialog();
			}
		});
		// youhou.. on passe au "design"
		setLayout(new FlowLayout());
		add(new JLabel("Authentification au serveur :"));
		haut.add(new JLabel("Pseudo : "), LEFT_ALIGNMENT);
		haut.add(inputUser, RIGHT_ALIGNMENT);
		bas.add(new JLabel("Mot de passe : "), LEFT_ALIGNMENT);
		bas.add(inputPassword, RIGHT_ALIGNMENT);

		add(haut);
		add(bas);

		add(btnOK, RIGHT_ALIGNMENT);
		add(btnCompte, LEFT_ALIGNMENT);
	}
	
	/**
	 * Permet de fixer le focus
	 */
	public void setFocus() {
		inputUser.requestFocus();
	}
}
